﻿/**
@author hanxf
2010-03-25
对表单中的表单元素进行数据合法性验证
@param {Object} 参数传递的是一个DOM对象
@return CheckResult 验证合法返回true,失败返回false
使用次方法说明
表单元素要添加五个属性
(1) reg="\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*" 要验证的正则表达式
(2) needcheck="yes" 表示该元素要进行验证
(3) allownull="yes" 表示该值可以不填，即可以为空值,但如果要填写的话,数据格式就一定要合法
(4) tip="验证出错时提示给用户的话"
(5) scope="1,10" 该属性表示验证用户填写数据的长度,在书写reg属性时不用在正则里面限定输入文本的长度,只要书写正确的正则即可
即设计人员只要对控件做如下处理就可以了
<input id="text306" type="text" onfocus="select();" reg="\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*"  needcheck="yes" allownull="Yes"  scope="1,10" tip="只能输入E-Mail">
//下面是tip数组的顺序
tip="['用户名不能为空哦','用户名必须为中文,数字,字符','长度在6-10之间']"
使用方法： 

(2) Form.Validator({ id: "registerdiv" }) 该方法返回一个布尔值true,false
    <div></div>
    Form.Validator({ id: "registerdiv" })


$(function() {
    Form.Blur({ id: "registerdiv" }); //对页面上表单元素失去焦点时进行验证，加强用户体验
    $("#btnSave").click(function() {
        Form.Validator({ id: "registerdiv" }); //用户在点击保存按钮时对表单进行验证
    });
}); 


(2) Form.DynamicSubmit(Setting);

        var Setting={
            IsHtmlPage:false
           ,Action:"AcceptParameter.php" 目的页面
           ,Data:{name:"111",password:"22222"}
          ,target:"_blank"
       }
       
    Form.DynamicSubmit(Setting);
       
       
</script>
*/
String.prototype.toURLJson = function (sperator) {
    var URL_Json = {};
    var url_arr = this.split(sperator);
    for (var i in url_arr) {
        var temp_arr = url_arr[i].split("=");
        var key = temp_arr[0] + "";
        if (URL_Json[key]) {
            URL_Json[key] += "_" + decodeURIComponent(temp_arr[1]);
        }
        else {
            URL_Json[key] = decodeURIComponent(temp_arr[1]);
        }
    }
    return URL_Json;
}
if (!this.Form) {
    this.Form = {};
}
~function() {
    Form = {
        HTMLDOM: null, radiodom: null
        , AlertMessage: ["不能为空", "输入的格式不对", "两次输入的密码不一致!"]
        , GetdDOM: function(o) {
            this.HTMLDOM = $("div[id='" + o.id + "'] input[needcheck='yes']");
        }
        , DynamicSubmit: function(ObjectSet) {
            if (ObjectSet.IsHtmlPage) {             //如果是提交到静态页面的话则要在Url中显示相关参数
                var Parameter = "&";
                for (var ParamerName in ObjectSet.Data) {
                    Parameter += ParamerName + "=" + ObjectSet.Data[ParamerName];
                };
                if (Parameter.length > 1) //如果要传递的参数不为空的话
                {
                    Parameter = Parameter.substring(1); //此处的作用是通过substring()函数截取&aa=11&bb=22&cc=33所引位置从1开始到最后的字符串
                    ObjectSet.Action += "?" + Parameter;
                };
                window.open(ObjectSet.Action, ObjectSet.target);
            }
            else {  //如果是提交到动态的php,aspx,jsp页面进行处理的话,把要传递的参数以Hidden的形式进行封装
                var Html = "<form id=\"formsub\" name=\"formsub\" action=\"" + ObjectSet.Action + "\" method=\"post\" target=\"" + ObjectSet.target + "\">";
                if (ObjectSet.Data !== undefined && ObjectSet.Data !== null) {
                    for (var ParametersName in ObjectSet.Data) {
                        Html += "<input type=\"hidden\" name=\"" + ParametersName + "\" value=\"" + ObjectSet.Data[ParametersName] + "\">";
                    };
                };
                Html += "</form>";
                $(Html).appendTo($("body")).submit().remove();
            }
        }
        , Validator: function(o) {
            var arr = o.id;
            var logic = [];
            Form.DataValidator({ id: arr }) ? logic.push(1) : logic.push(0);
            Form.CheckPassword({ id: arr }) ? logic.push(1) : logic.push(0);
            if (logic.length > 0 && eval(logic.join("+")) >= logic.length) {
                logic = [];
                return true;
            }
            logic = [];
            return false;
        }
        , Blur: function(o) {
            this.LostFocus({ id: o.id });
        }
        , DealError: function(o) {
            $(o.dom).next().html(o.Alert ? "<font color='red'>" + o.Message + "</font>" : "");
        }
        , CheckLength: function(o) {
            if ($(o).attr("scope")) {
                var scope_arr = $(o).attr("scope").split(",");
                var arr = eval($(o).attr("tip"));
                var CheckValue = $.trim($(o).val());
                CheckValue = CheckValue.replace(/[\u4E00-\u9FA5]/gi, "xx"); //把中文弄成一个中文两个长度来处理
                if (CheckValue.length < +scope_arr[0] || CheckValue.length > +scope_arr[1]) {
                    Form.DealError({ dom: o, Alert: 1, Message: arr[2] });
                    return false;
                }
            }
        }
        , CheckPassword: function(o) {
            var Password_dom = $("div[id='" + o.id + "'] input[type='password'][InputType='MM']");
            if (Password_dom.length) {
                var one = $.trim($(Password_dom[0]).val());
                var two = $.trim($(Password_dom[1]).val());
                if (one === "" && two === "") {
                    return false;
                }
                if (one !== "" && two !== "" && one !== two) {
                    Form.DealError({ dom: Password_dom[1], Alert: 1, Message: Form.AlertMessage[2] });
                    return false;
                } else {
                    Form.DealError({ dom: Password_dom[1], Alert: 0, Message: "" });
                    return true;
                }
            }
            return true;
        }
        , LostFocus: function(o) {
            this.GetdDOM(o);
            $(this.HTMLDOM).each(function() {
                $(this).blur(function() {
                    var strGroup = $(this).attr("needcheck");
                    if ($(this).attr("needcheck") !== undefined && $(this).attr("needcheck").indexOf(strGroup) > -1) { //表示该文本框要验证
                        var arr = eval($(this).attr("tip"));
                        if ($(this).attr("allownull") == undefined) {  //表是文本框中不存在allownull属性
                            if ($(this).val() !== "" && $(this).val() !== null) {  //在文本框的值不为空的情况下进行验证
                                var thisRegStr = new RegExp($(this).attr("reg"));
                                if (!thisRegStr.test($(this).val())) { //表示填写的数据不合法
                                    //$(this).addClass("textWrongStyle").removeClass("textRightStyle");
                                    Form.DealError({ dom: this, Alert: 1, Message: arr[1] });
                                    return false;
                                }
                                else {
                                    // $(this).addClass("textRightStyle").removeClass("textWrongStyle");
                                    Form.DealError({ dom: this, Alert: 0, Message: "" });
                                    Form.CheckLength(this);
                                }
                            }
                            else {  //如果文本框中要求不能为空但却赋了空值的话
                                //$(this).addClass("textWrongStyle").removeClass("textRightStyle");
                                Form.DealError({ dom: this, Alert: 1, Message: arr[0] });
                                return false;
                            }
                        }
                        else {    // 表是文本框中存在allownull属性  allownull!=undefined属性表示次文本框可以为空值
                            if ($(this).val() === "" || $(this).val() == null) {
                                //$(this).addClass("textRightStyle").removeClass("textWrongStyle");
                                Form.DealError({ dom: this, Alert: 0, Message: "" });
                                Form.CheckLength(this);
                            }
                            else {
                                var RegStr = new RegExp($(this).attr("reg"));
                                if (!RegStr.test($(this).val())) {//表示填写的数据不合法
                                    //$(this).addClass("textWrongStyle").removeClass("textRightStyle");
                                    Form.DealError({ dom: this, Alert: 1, Message: arr[1] });
                                    return false;
                                }
                                else {
                                    //$(this).addClass("textRightStyle").removeClass("textWrongStyle");
                                    Form.DealError({ dom: this, Alert: 0, Message: "" });
                                    Form.CheckLength(this);
                                }
                            }
                        }
                    }
                });
            });
        }
		, DataValidator: function(o) {
		    var LogicValue = true;
		    var LogicArray = [];
		    var jQobject, strGroup;
		    this.GetdDOM(o);
		    $(Form.HTMLDOM).each(function() {
		        strGroup = $(this).attr("needcheck");
		        if ($(this).attr("needcheck") !== undefined && $(this).attr("needcheck").indexOf(strGroup) > -1) {
		            var arr = eval($(this).attr("tip"));
		            if ($(this).attr("allownull") == undefined) {
		                if ($(this).val() !== "" && $(this).val() != null) {
		                    var thisRegStr = new RegExp($(this).attr("reg"));
		                    if (!thisRegStr.test($(this).val())) {
		                        Form.DealError({ dom: this, Alert: 1, Message: arr[1] });
		                        LogicArray.push("N");
		                    }
		                    else {
		                        Form.DealError({ dom: this, Alert: 0, Message: "" });
		                        LogicArray.push("Y");
		                    }
		                    Form.CheckLength(this);
		                }
		                else {
		                    Form.DealError({ dom: this, Alert: 1, Message: arr[0] });
		                    LogicArray.push("N");
		                }
		            }
		            else {
		                if ($(this).val() === "" || $(this).val() == null) {
		                    Form.DealError({ dom: this, Alert: 0, Message: "" });
		                    LogicArray.push("Y");
		                }
		                else {
		                    var RegStr = new RegExp($(this).attr("reg"));
		                    if (!RegStr.test($(this).val())) {
		                        Form.DealError({ dom: this, Alert: 1, Message: arr[1] });
		                        LogicArray.push("N");
		                    }
		                    else {
		                        Form.DealError({ dom: this, Alert: 0, Message: "" });
		                        LogicArray.push("Y");
		                    }
		                    Form.CheckLength(this);
		                }
		            }
		        }
		        if (LogicArray != null && LogicArray.length > 0 && LogicArray !== undefined) {
		            for (var j in LogicArray) {
		                if (LogicArray[j] == "N") {
		                    LogicValue = false;
		                    break;
		                }
		            }
		        }
		        else {
		            LogicValue = false;
		        }
		    });
		    return LogicValue;
		}
    }

} ();
    


